﻿#ifndef LEDATA_H
#define LEDATA_H

#include <QVector>
#include <QSettings>
#include "LECalibrator.h"

/**
 * @brief The LEData class 光栅尺数据修正的辅助类。用于加载和保存修正数据点序列
 */
class LEData
{
public:
    LEData();
    /**
     * @brief loadFromSettings 从配置文件中加载修正数据点。
     * @param settings 配置文件
     * @param prefix 数据在配置文件中的位置，类似 "Encoder/AxisX_" 这样。
     * @note 特别注意：加载数据后并不会传递给 LECalibrator 对象。需要人为调用 transfer(LECalibrator *cal) 函数。
     */
    void loadFromSettings(QSettings &settings, QString prefix);
    /**
     * @brief writeToSettings 将修正数据保存到配置文件
     * @param settings 配置文件
     * @param prefix 数据在配置文件中的位置，类似 "Encoder/AxisX_" 这样。数据个数保存为 Encoder/AxisX_Count。
     *  具体的数据保存为 Encoder/AxisX_0、Encoder/AxisX_1、Encoder/AxisX_2 ...
     */
    void writeToSettings(QSettings &settings, QString prefix);
    /**
     * @brief clear 清除全部数据
     */
    void clear();
    /**
     * @brief append 添加一个新的数据点
     * @param x
     * @return
     */
    bool append(double x);

    /**
     * @brief removeLast 丢弃最后一次加入的数据点
     * @return
     */
    void removeLast() { m_data.removeLast();}
    /**
     * @brief transfer 将数据点传输给 LECalibrator 对象。
     * @param cal
     */
    void transfer(LECalibrator *cal);

    /**
     * @brief size 返回数据点的个数
     * @return
     */
    int size() {return m_data.size();}
private:
    QVector<double> m_data;
};

#endif // LEDATA_H
